package com.jsy.common.util.anotation;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.Calendar;
import java.util.Date;

/**
 * SuppressWarnings
 * deprecation  -- 使用了不赞成使用的类或方法时的警告
 * unchecked    -- 执行了未检查的转换时的警告，例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。
 * fallthrough  -- 当 Switch 程序块直接通往下一种情况而没有 Break 时的警告。
 * path         -- 在类路径、源文件路径等中有不存在的路径时的警告。
 * serial       -- 当在可序列化的类上缺少 serialVersionUID 定义时的警告。
 * finally      -- 任何 finally 子句不能正常完成时的警告。
 * all          -- 关于以上所有情况的警告。
 */
public class Test {
    @TestAnnotation(value = "测试方法")
    @SuppressWarnings(value={"deprecation", "unchecked"})//表示对"它所标注的内容"中的 "SuppressWarnings 不再建议使用警告"和"未检查的转换时的警告"保持沉默。
    public static void main(String args[]) {
        Date date = new Date(2022, Calendar.AUGUST, 26);
        System.out.println(date);
        testAnnotaion();
    }

    @Deprecated
    private static void testAnnotaion() {
        try {
            Class c = Test.class;
            Method[] methods = c.getDeclaredMethods();
            for (Method method : methods) {
                Annotation[] annotations = method.getDeclaredAnnotations();
                for (Annotation annotation : annotations) {
                    if (annotation instanceof TestAnnotation){
                        TestAnnotation testAnnotation = (TestAnnotation) annotation;
                        System.out.println(testAnnotation.value());
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
